package org.loneranger.p4_inferred_construction_method;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;


@Component
public class IcmService {


    private IcmUser user;

    /**
     * 1.如果spring中没有icmUser这个bean，那么spring在创建icmService的时候会报错
     */
    public IcmService(IcmUser user) {
        this.user = user;
        System.out.println("icmService构造函数 - 1参");
    }


    /**
     * 如果有两个构造函数，spring不知道用哪一个构造函数，默认回去找无参的构造函数，如果没有无参构造，就会报错
     */
    @Autowired(required = false)
    public IcmService() {
        System.out.println("icmService构造函数 - 0参");
    }


    /**
     * 1.使用@Autowired注解可以指定Spring使用哪个构造函数
     * 2.如果有两个构造函数使用了@Autowird注解，Spring还会报错
     * 3.给多个构造函数的@Autowird加上参数，Spring会从参数最多的构造方法开始判断，看类型和名称是否在Spring容器中存在，如果存在的话，就使用该构造函数
     */
    @Autowired(required = false)
    public IcmService(IcmUser user1, IcmUser user2) {
        this.user = user1;
        System.out.println("icmService构造函数 - 2参");
    }

    /**
     * 如果两个构造方法都符合Spring的判断，那么代码的顺序就会影响Spring的判断
     *
     * @param user1
     * @param icmPerson
     */
    @Autowired(required = false)
    public IcmService(IcmUser user1, IcmPerson icmPerson) {
        this.user = user1;
        System.out.println("icmService构造函数 - person");
    }


}
